package com.cskaoyan.javase.oop2._1extends._7initialization._5super;

import javafx.animation.Animation;

/**
 * super关键字指向子类对象中,父类成员的那片区域
 * 所以想要使用super关键字,必须先有子类对象
 * 那么super关键字的使用场景:
 *      和this一样,能用this就能用super
 *
 * this vs super
 * 这两个关键字实际上非常像,一个指向子类对象自身,一个近似指向父类对象
 * 用的时候可以用this./super.分别表示访问自身成员,以及父类成员
 * 在父子类成员没有同名的情况下,
 * this.父类成员和super.父类成员是等价的
 * 但是this.可以访问子类自身成员,super.是访问不了的
 *
 * 在父子类成员有同名的情况下,这时
 * super.同名成员就是父类成员
 * this.同名成员就是子类成员
 *
 * 除此之外,super和this还有以下区别:
 *      1.this是一个引用,它确实指向一个对象
 *          super不是引用,它没有指向对象,指向子类对象中父类成员的区域
 *          最多近似的看成指向父类对象
 *          所以this是可以输出的,super不是引用不能输出.
 *
 *
 *       2.this终究是指向自身对象,访问的都是自己的东西,没有权限限制
 *          但是super终究指向的是父类成员,所以它受权限限制.
 *
 * @since 11:24
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
}

class Animal {
    int age;
    private int num;
    int var;
}

class Cat extends Animal {
    String name;
    private int num;
    int var;

    public void test(int var) {
        System.out.println(this);
        // System.out.println(super);
        System.out.println(this.age);
        System.out.println(super.age);
        System.out.println(this.name);
        // super.name
        System.out.println(this.num);
        // super访问父类成员受权限限制
        // System.out.println(super.num);
        System.out.println(var);
        System.out.println(this.var);
        System.out.println(super.var);
    }
}